"""
题目：计算二叉树的最大深度（从根节点到最远叶子节点的最长路径上的节点数）。
"""


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def max_depth(root):
    """计算二叉树的最大深度（递归实现）"""
    # 空节点深度为0 也可以作为递归的最小问题的返回值
    if not root:
        return 0
    # 递归计算左子树深度
    left_depth = max_depth(root.left)
    # 递归计算右子树深度
    right_depth = max_depth(root.right)
    # 当前节点的深度 = 1（自身） + 左、右子树中较大的深度
    return 1 + max(left_depth, right_depth)


#创建二叉树（复用）
def create_binary_tree(arr):
    if not arr:
        return None
    root = TreeNode(arr[0])
    queue = [root]
    index = 1
    while queue and index < len(arr):
        current = queue.pop(0)
        if arr[index] is not None:
            current.left = TreeNode(arr[index])
            queue.append(current.left)
        index += 1
        if index < len(arr) and arr[index] is not None:
            current.right = TreeNode(arr[index])
            queue.append(current.right)
        index += 1
    return root


# 测试
root1 = create_binary_tree([3, 9, 20, None, None, 15, 7])
# 树结构：
#       3
#      / \
#     9  20
#       /  \
#      15   7
print(max_depth(root1))  # 输出: 3

root2 = create_binary_tree([1, None, 2])
print(max_depth(root2))  # 输出: 2（只有根和右子节点）
